package module.library.service;


import common.model.Entity.libraryEntity.Fine;
import common.model.Entity.libraryEntity.enums.FineStatus;
import network.protocol.Response;

import java.math.BigDecimal;
import java.sql.Connection;
import java.util.List;
import java.util.Optional;

public interface FineService {

    /**
     * 根据借阅记录ID创建并保存一条新的罚款记录。
     * 该方法在一个事务中被调用，以确保数据一致性。
     *
     * @param conn           数据库连接对象。
     * @param borrowRecordId 关联的借阅记录ID。
     * @param userId         产生罚款的用户ID。
     * @param fineAmount     罚款金额。
     * @param reason         罚款原因。
     * @return 返回罚款记录的 id
     */
    Response<Long> createFineRecord(Connection conn, Long borrowRecordId, Long userId, BigDecimal fineAmount, String reason);

    /**
     * 处理罚款支付。
     *
     * @param fineId        罚款记录ID。
     * @param paymentMethod 支付方式。
     * @return 如果支付成功则返回 true，否则返回 false。
     */
    Response<?> processFinePayment(Long fineId, String paymentMethod);

    /**
     * 根据用户ID查询所有罚款记录。
     * @param userId 用户ID。
     * @return 罚款记录列表。
     */
    Response<List<Fine>> findFinesByUserId(Long userId);

    /**
     * 根据支付状态查询罚款记录。
     * @param status 支付状态（已支付或未支付）。
     * @return 罚款记录列表。
     */
    Response<List<Fine>> findFinesByStatus(FineStatus status);

    /**
     * 根据ID查询单个罚款记录。
     * @param fineId 罚款ID。
     * @return 匹配的罚款记录。
     */
    Response<Optional<Fine>> findFineById(Long fineId);
}